05.04 일지
SplashActivity >> MainActivity 넘어가지 않는 문제 디버깅
디버깅 툴
Flutter를 쓸 때완 다르게 디바이스 화면에서 에러를 확인할 수 없는 것 같다. - 이런 측면은 사용자 경험에 좋아보인다
대신 에러코드를 Android Studio logcat
을 통해서 확인가능했다
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.inbody_clone, PID: 19211
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.inbody_clone/com.example.inbody_clone.MainActivity}: android.view.InflateException: Binary XML file line #23 in com.example.inbody_clone:layout/activity_main: Binary XML file line #18 in com.example.inbody_clone:layout/content_main: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3676)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3813)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2308)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7898)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Caused by: android.view.InflateException: Binary XML file line #23 in com.example.inbody_clone:layout/activity_main: Binary XML file line #18 in com.example.inbody_clone:layout/content_main: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #18 in com.example.inbody_clone:layout/content_main: Error inflating class fragment
Caused by: java.lang.IllegalArgumentException: Binary XML file line #18: Duplicate id 0x7f080133, tag null, or parent id 0xffffffff with another fragment for androidx.navigation.fragment.NavHostFragment
at androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:117)
at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:135)
at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:295)
at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:274)
at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1073)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1001)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1127)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1267)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
at android.view.LayoutInflater.inflate(LayoutInflater.java:686)
at android.view.LayoutInflater.inflate(LayoutInflater.java:538)
at android.view.LayoutInflater.inflate(LayoutInflater.java:485)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:706)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:195)
at com.example.inbody_clone.MainActivity.onCreate(MainActivity.kt:24)
at android.app.Activity.performCreate(Activity.java:8290)
at android.app.Activity.performCreate(Activity.java:8269)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1384)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3657)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3813)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
2023-05-04 20:57:01.833 19211-19211/? E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2308)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7898)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
2023-05-04 20:57:01.859 19211-19211/? I/Process: Sending signal. PID: 19211 SIG: 9
logcat 확인1
java.lang.RuntimeException: Unable to start activity ComponentInfo{.MainActivity}
⇒ MainActivity 클래스의 실행에 실패함
logcat 확인2
android.view.InflateException
⇒ Inflate과정에서 에러가 발생함을 확인
Inflate fragment란?
Inflate
: XML 파일에 정의된 레이아웃을 인스턴스를 만들어서 띄어주는 과정
⇒ XML 레이아웃 파일의 정의가 잘못되어 있어 XML 파일을 띄울 때 문제가 발생한 것 같음
logcat 확인3
Error inflating class fragment
⇒ 런타임에서 Fragment를 만들어낼 때 에러가 발생함
결론: XML파일이 제대로 쓰여졌는지 확인
XML파일 문제지점1
Caused by: android.view.InflateException: Binary XML file line #23 in com.example.inbody_clone:layout/activity_main: Binary XML file line #18 in com.example.inbody_clone:layout/content_main: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #18 in com.example.inbody_clone:layout/content_main: Error inflating class fragment
Caused by: java.lang.IllegalArgumentException: Binary XML file line #18: Duplicate id 0x7f080133, tag null, or parent id 0xffffffff with another fragment for androidx.navigation.fragment.NavHostFragment
위의 2개 문제들은 아래의 에러로부터 기인한 것으로 판단,
Binary XML file line #18: Duplicate id 0x7f080133, tag null, or parent id 0xffffffff with another fragment for androidx.navigation.fragment.NavHostFragment
⇒ 동일한 id를 가진 NavHostFragment
가 인스턴스로 생성돼서 문제가 발생
XML파일 문제지점2
XML file line #18 = app:navGraph="@navigation/nav_graph" />
⇒ 해당 코드 자체는 <fragment />
에서 어떤 네비게이션 그래프를 사용할지 명시해주는 부분이라 문제가 발생할 여지가 없음 → nav_graph.xml
파일 쪽의 문제인가?
해당 부분을 삭제하고 실행해도 여전히 에러발생
⇒ #18에서 문제가 생긴건 navGraph를 명시하는 과정이 아니라 <fragment />
태그가 닫히는 부분이었기 때문에 #18로 명시되었음을 확인.
XML파일 문제지점3
그렇다면 with another fragment for androidx.navigation.fragment.NavHostFragment
는 NavHost가 관리하는 Fragment 중 id가 중복이되는 Fragment가 존재한다는 의미로 이해할 수 있겠다.
그리고 중복되는 Fragment는 바로 현재 정의하고 있는 이 <fragment>
겠지?
but.. ⇒ 찾아봐도 중복되는 부분이 안보임
우선 막힌 상태에서 마무리, 내일 다시...